package com.liveneo.stoat.common.service;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.liveneo.stoat.common.entity.BaseEntity;
import com.liveneo.stoat.common.mapper.BaseMapper;
import com.liveneo.stoat.common.page.PageParam;

/**
 * 
 *@Description: 所有服务类的基类
 *@Author:hjt 
 *@Since:2017年1月13日 下午9:48:28 
 *@Version:1.0.0
 */
public abstract class BaseService <D extends BaseMapper <T>, T extends BaseEntity>{
	@Autowired
	protected D mapper;
	    
	/**
	 * 
	 * @Description:新增一条数据
	 * @Since:2016年11月10日 下午6:28:07
	 * @Author:hjt
	 */
	public boolean insert (T entity) throws Exception{
		return mapper.insert(entity) > 0;
	}
	
	/**
	 * 
	 * @Description:更新一条数据
	 * @Since:2016年11月10日 下午6:28:07
	 * @Author:hjt
	 */
	public boolean update (T entity) throws Exception{
		return mapper.update(entity) > 0;
	}
	
	/**
	 * 
	 * @Description: 新增或修改一条数据
	 * @Since:2017年1月24日 上午11:24:42 
	 * @Author:hjt
	 */
	public boolean save (T entity) throws Exception{
		if(StringUtils.isBlank(entity.getId())){
			entity.preInsert();
			return mapper.insert(entity) > 0;
		} else {
			entity.preUpadate();
			return mapper.update(entity) > 0;
		}
	}
	
	/**
	 * 根据ID查询一条数据
	 * @param id
	 * @return
	 */
	public T selectById (String id) throws Exception{
		return mapper.selectById(id);
	}
	
	/**
	 * 查询列表
	 * @param entity
	 * @return
	 */
	public List<T> queryList (T entity) throws Exception{
		return mapper.queryList(entity);
	}
	
	
	
	/**
	 * 分页查询列表 pageHelper PageInfo 分页参数，起始页码 每一页的大小， 排序
	 * @param entity
	 * @param pageParam
	 * @return
	 */
	public PageInfo<T> queryListWithPage (T entity, PageParam pageParam) throws Exception{
		//判断是否含有排序的字符串
		if (StringUtils.isNotBlank(pageParam.getOrderBy())) {
			PageHelper.orderBy(pageParam.getOrderBy());
		}
		PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize());
		List<T> resultList = mapper.queryList(entity);
		return new PageInfo<T>(resultList);
	}
	
	/**
	 * 删除数据
	 * @param id
	 * @return
	 */
	public boolean deleteById (String id) throws Exception{
		int res = mapper.deleteById(id);
		return res > 0;
	}
}
